#!usr/bin/env python
# -*- coding:utf-8 _*-
"""
@author:Zx
@file: logging_config.py.py
@time: 2025/3/26  13:45
# @describe:
"""
import os
import logging
from logging.handlers import RotatingFileHandler
from datetime import datetime


def configure_logging(app):
    """配置应用程序日志"""

    # 创建日志目录（如果不存在）
    log_dir = os.path.join(app.root_path, 'logs')
    if not os.path.exists(log_dir):
        os.makedirs(log_dir)

    # 基本配置
    log_level = logging.DEBUG if app.debug else logging.INFO
    log_format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
    date_format = '%Y-%m-%d %H:%M:%S'

    # 清除默认处理器
    for handler in logging.root.handlers[:]:
        logging.root.removeHandler(handler)

    # 控制台日志（开发环境）
    if app.debug:
        console_handler = logging.StreamHandler()
        console_handler.setLevel(log_level)
        console_handler.setFormatter(logging.Formatter(log_format, date_format))
        logging.root.addHandler(console_handler)

    # 文件日志（所有环境）
    # 每天创建一个新日志文件（按日期命名）
    today = datetime.now().strftime('%Y-%m-%d')
    file_handler = RotatingFileHandler(
        filename=os.path.join(log_dir, f'app_{today}.log'),
        maxBytes=1024 * 1024 * 10,  # 单个文件最大10MB，保留最近10个备份
        backupCount=10,
        encoding='utf-8'
    )
    file_handler.setLevel(log_level)
    file_handler.setFormatter(logging.Formatter(log_format, date_format))
    logging.root.addHandler(file_handler)

    # 错误日志单独记录
    error_handler = RotatingFileHandler(
        filename=os.path.join(log_dir, f'error_{today}.log'),
        maxBytes=1024 * 1024 * 10,  # 10MB
        backupCount=10,
        encoding='utf-8'
    )
    error_handler.setLevel(logging.ERROR)
    error_handler.setFormatter(logging.Formatter(log_format, date_format))
    logging.root.addHandler(error_handler)

    # 设置根日志级别
    logging.root.setLevel(log_level)

    # Flask 内置日志器配置
    app.logger.handlers.clear()
    app.logger.propagate = True  # 传播到根日志器

    # SQLAlchemy 日志配置（可选）
    if not app.debug:
        sql_logger = logging.getLogger('sqlalchemy.engine')
        sql_logger.setLevel(logging.WARNING)

    # app.logger.info('Logging 配置完成')